# 创建时间：2025/5/2 星期五 16:23
# 创建人：李德才

class Person:
    def __new__(cls, *args, **kwargs):
        print("__new__被调用执行了，cls的id值为{0}".format(id(cls)))
        obj = super().__new__(cls)
        print("创建的对象的id为{0}".format(id(obj)))
        return obj

    def __init__(self, name, age):
        print("__init__被调用执行了，self的id值为{0}".format(id(self)))
        self.name = name
        self.age = age


print("object这个类对象的id为{0}".format(id(object)))
print("Person这个类对象的id为{0}".format(id(Person)))
p = Person("张三", 18)
print("p这个对象对象的id为{0}".format(id(p)))

""" 
执行结果：
object这个类对象的id为 140732236252928
Person这个类对象的id为 2284077337536
__new__被调用执行了，cls的id值为 2284077337536
创建的对象的id为 2284088283152
__init__被调用执行了，self的id值为 2284088283152
p这个对象对象的id为 2284088283152
"""

"""
执行顺序：
17行：object这个类对象的id为 140732236252928
18行：Person这个类对象的id为 2284077337536
19行：先初始化然后赋值，Person("张三", 18) 先被执行，所以第5行的 __new__ 被调用执行了，cls的id值为 2284077337536，
这里是将18行的Person类对象传递给了5行的cls，所以第6行的cls的id值为 2284077337536，
然后执行了10行的super().__new__(cls)，创建了一个对象， 创建的对象的id为 2284088283152
然后 __init__被调用执行了，self其实就是 __new__ 方法中创建的对象， 所以第12行的id值为 2284088283152
创建对象成功之后，返回了这个对象， 所以第20行的p这个对象对象的id为 2284088283152
"""
